# 导入yaml库，用于解析YAML格式的配置文件
import yaml
# 导入os库，用于与操作系统交互，这里主要用来获取环境变量
import os

def load_config():
    """
    加载配置文件。
    该函数支持根据环境变量'APP_ENV'加载不同的配置文件，
    例如，如果APP_ENV='production'，则加载'config.prod.yml'。
    如果对应的环境配置文件不存在，则默认加载'config.yml'。
    """
    # 从环境变量中获取'APP_ENV'的值，如果不存在，则默认为'development'
    env = os.getenv('APP_ENV', 'development')
    
    # 根据环境构造配置文件名
    config_file = f'config.{env}.yml' if env != 'production' else 'config.yml'
    
    # 检查环境特定的配置文件是否存在，如果不存在，则退回到默认的'config.yml'
    if not os.path.exists(config_file):
        config_file = 'config.yml'

    # 使用'with'语句安全地打开和关闭文件
    with open(config_file, 'r', encoding='utf-8') as f:
        # 使用yaml.safe_load解析YAML文件，这比yaml.load更安全，可以防止执行任意代码
        config = yaml.safe_load(f)
    return config

# 在模块加载时执行函数，将配置加载到内存中
config = load_config()

# 从加载的配置中获取数据库相关的部分
# .get('database', {})表示尝试获取'database'键，如果不存在，则返回一个空字典，避免程序出错
DB_CONFIG = config.get('database', {})